﻿namespace S7.Net.Types
{
    using System;

    public static class Double
    {
        public static double FromByteArray(byte[] bytes)
        {
            if (bytes.Length != 4)
            {
                throw new ArgumentException("Wrong number of bytes. Bytes array must contain 4 bytes.");
            }
            if (BitConverter.IsLittleEndian)
            {
                bytes = new byte[] { bytes[3], bytes[2], bytes[1], bytes[0] };
            }
            return (double) BitConverter.ToSingle(bytes, 0);
        }

        public static double FromDWord(int value)
        {
            return FromByteArray(DInt.ToByteArray(value));
        }

        public static double FromDWord(uint value)
        {
            return FromByteArray(DWord.ToByteArray(value));
        }

        public static double[] ToArray(byte[] bytes)
        {
            double[] numArray = new double[bytes.Length / 4];
            int num = 0;
            for (int i = 0; i < (bytes.Length / 4); i++)
            {
                byte[] buffer1 = new byte[] { bytes[num++], bytes[num++], bytes[num++], bytes[num++] };
                numArray[i] = FromByteArray(buffer1);
            }
            return numArray;
        }

        public static byte[] ToByteArray(double[] value)
        {
            ByteArray array = new ByteArray();
            foreach (double num2 in value)
            {
                array.Add(ToByteArray(num2));
            }
            return array.array;
        }

        public static byte[] ToByteArray(double value)
        {
            byte[] bytes = BitConverter.GetBytes((float) value);
            if (!BitConverter.IsLittleEndian)
            {
                return bytes;
            }
            return new byte[] { bytes[3], bytes[2], bytes[1], bytes[0] };
        }
    }
}

